package com.geoway.adf.report.excel.workbook;

import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.geoway.adf.report.excel.sheet.Sheet;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author: lzw
 * @Date: 2024/1/17 16:41
 * @Description:
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString
@JsonInclude(JsonInclude.Include.ALWAYS)
public class WorkBook implements Cloneable{
    /**
     * 设定DOM容器的id
     */
    private String container="luckysheet";
    /**
     * 工作薄名称
     */
    private String title="报表";
    /**
     * 工作簿唯一标识
     */
    private String gridKey="";
    /**
     * 国际化设置，默认值："en"
     */
    private String lang="zh";
    /**
     * 插件
     */
    private List<String> plugins;
    /**
     * 钩子函数
     */
    private JSONObject hook;
    /**
     * 左上角返回链接，默认www.baidu.com
     */
    private String myFolderUrl= "www.baidu.com";
    /**
     * 行标题区域的宽度，如果设置为0，则表示隐藏行标题
     */
    private Integer rowHeaderWidth =46;
    /**
     * 列标题区域的高度，如果设置为0，则表示隐藏列标题
     */
    private Integer columnHeaderHeight=20;
    /**
     * 初始化默认字体大小
     */
    private Byte defaultFontSize= 11;
    /**
     * 强制刷新公式，默认false，开启后可能会影响性能
     */
    private Boolean forceCalculation=false;
    /**
     * 顶部信息栏，默认true
     */
    private Boolean showinfobar=true;
    /**
     * sheet表重命名时是否限制名称的长度
     */
    private Boolean limitSheetNameLength=true;
    /**
     * 默认允许的sheet表名称最大长度
     */
    private Integer defaultSheetNameMaxLength=31;
    /**
     * 是否显示公式栏
     */
    private Boolean sheetFormulaBar= true;
    /**
     * 顶部工具栏，默认true；如果showtoolbar配置false，则showtoolbarConfig不能配置，否则报错
     */
    private Boolean showtoolbar= true;
    /**
     * 底部添加按钮，默认true
     */
    private Boolean enableAddRow=true;
    /**
     * 底部回到顶部按钮，默认true
     */
    private Boolean enableAddBackTop=true;
    /**
     * 底部sheet页操作按钮，默认true
     */
    private Boolean showsheetbar=true;

    private ShowSheetBarConfig showsheetbarConfig = new ShowSheetBarConfig();

    private SheetRightClickConfig sheetRightClickConfig = new SheetRightClickConfig();

    private Pager pager = new Pager();

    /**
     * 底部统计，默认true
     */
    private Boolean showstatisticBar=true;

    private ShowStatisticBarConfig showstatisticBarConfig = new ShowStatisticBarConfig();

    private CellRightClickConfig cellRightClickConfig = new CellRightClickConfig();

    private List<Sheet> data;

    @Override
    public WorkBook clone() {
        return new WorkBook().setContainer(container)
                .setTitle(title)
                .setGridKey(gridKey)
                .setLang(lang)
                .setPlugins(plugins.stream().collect(Collectors.toList()))
                .setHook(hook)
                .setMyFolderUrl(myFolderUrl)
                .setRowHeaderWidth(rowHeaderWidth)
                .setColumnHeaderHeight(columnHeaderHeight)
                .setDefaultFontSize(defaultFontSize)
                .setForceCalculation(forceCalculation)
                .setShowinfobar(showinfobar)
                .setLimitSheetNameLength(limitSheetNameLength)
                .setDefaultSheetNameMaxLength(defaultSheetNameMaxLength)
                .setSheetFormulaBar(sheetFormulaBar)
                .setShowtoolbar(showtoolbar)
                .setEnableAddRow(enableAddRow)
                .setEnableAddBackTop(enableAddBackTop)
                .setShowsheetbar(showsheetbar)
                .setShowsheetbarConfig(showsheetbarConfig)
                .setSheetRightClickConfig(sheetRightClickConfig)
                .setPager(pager)
                .setShowstatisticBar(showstatisticBar)
                .setShowstatisticBarConfig(showstatisticBarConfig)
                .setCellRightClickConfig(cellRightClickConfig)
                .setData(data.stream().collect(Collectors.toList()));
    }
}
